package ar.uade.edu.fain.ad.server.business;

import java.util.Date;

import ar.uade.edu.fain.ad.common.transfer.ItemRemitoVO;
import ar.uade.edu.fain.ad.common.transfer.OrdenCompraVO;

public class ItemRemito {

	private Producto producto;

	private Integer cantidad;

	private Date fechaCaducidad;

	private OrdenCompra ordenCompra;

	private ItemOrdenCompra itemOrdenCompra;

	private Integer faltante;

	private Integer aceptada;

	private NotaDevolucion devolucion;

	public ItemRemito() {
		super();
	}

	public Producto getProducto() {
		return producto;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}

	public Integer getCantidad() {
		return cantidad;
	}

	public void setCantidad(Integer cantidad) {
		this.cantidad = cantidad;
	}

	public Integer getAceptada() {
		return aceptada;
	}

	public void setAceptada(Integer aceptada) {
		this.aceptada = aceptada;
	}

	public Date getFechaCaducidad() {
		return fechaCaducidad;
	}

	public void setFechaCaducidad(Date fechaCaducidad) {
		this.fechaCaducidad = fechaCaducidad;
	}

	public OrdenCompra getOrdenCompra() {
		return ordenCompra;
	}

	public void setOrdenCompra(OrdenCompra ordenCompra) {
		this.ordenCompra = ordenCompra;
	}

	public NotaDevolucion getDevolucion() {
		return devolucion;
	}

	public void setDevolucion(NotaDevolucion devolucion) {
		this.devolucion = devolucion;
	}

	public Integer getFaltante() {
		return faltante;
	}

	public void setFaltante(Integer faltante) {
		this.faltante = faltante;
	}

	public ItemOrdenCompra getItemOrdenCompra() {
		return itemOrdenCompra;
	}

	public void setItemOrdenCompra(ItemOrdenCompra itemOrdenCompra) {
		this.itemOrdenCompra = itemOrdenCompra;
	}

	public boolean hayFaltantes() {
		return getFaltante() != null && getFaltante() > 0;
	}

	public boolean hayDevoluciones() {
		return getDevolucion() != null;
	}

	public void impactarOrdenCompra() {
		for (ItemOrdenCompra itemOrdenCompra : getOrdenCompra().getItems()) {
			if (itemOrdenCompra.getProducto().equals(getProducto())) {
				final Integer faltanteInicial = itemOrdenCompra.getCantidad()
						- itemOrdenCompra.getRecibido();
				if (faltanteInicial >= getCantidad()) {
					itemOrdenCompra.recibir(getCantidad());
					setAceptada(getCantidad());
					setFaltante(faltanteInicial - getCantidad());
				} else {
					itemOrdenCompra.recibir(faltanteInicial);
					setAceptada(faltanteInicial);
					final NotaDevolucion notaDevolucion = new NotaDevolucion();
					notaDevolucion.setCantidad(getCantidad() - faltanteInicial);
					notaDevolucion.setItemOrdenCompra(itemOrdenCompra);
					setDevolucion(notaDevolucion);
				}
				setItemOrdenCompra(itemOrdenCompra);
				break;
			}
		}
	}

	public ItemRemitoVO toVO() {
		final ItemRemitoVO vo = new ItemRemitoVO();
		vo.setCantidad(getCantidad());
		vo.setFechaCaducidad(getFechaCaducidad());
		vo.setOrdenCompra(new OrdenCompraVO());
		vo.getOrdenCompra().setId(getOrdenCompra().getId());
		vo.setProducto(getProducto().toVO());
		return vo;
	}
	
}
